package com.oriental.manage.model.specially;

import com.oriental.manage.pojo.base.BaseModel;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by jinxin on 2017/4/18.
 */
@Data
public class EnterpriseMchntBaseInfo extends BaseModel{

    /**主键*/
    private String id;
    /**商户类型，参见商户类型，默认0102:自然人*/
    @NotBlank(message = "商户类型不能为空")
    @Pattern(regexp = "^(\\d{2})$",message = "商户类型有误")
    private String cusType;
    /**商户属性，参见数据字典定义（商户属性）*/
    @NotBlank(message = "商户属性不能为空")
    @Pattern(regexp = "^(\\d{2})$",message = "商户属性有误")
    private String cusNature;
    /**商户名称*/
    @NotBlank(message = "商户名称不能为空")
    @Pattern(regexp = "^\\S{1,128}$",message = "商户名称有误，非空白字符不大于128位")
    private String regName;
    /**商户简称*/
    @NotBlank(message = "商户简称不能为空")
    @Pattern(regexp = "^\\S{1,64}$",message = "商户简称有误，非空白字符不大于64位")
    private String cusName;
    /**商户英文名称*/
    @Pattern(regexp = "^\\w{0,64}$",message = "商户英文名称有误,英文字符不大于64位")
    private String cusNameEn;
    /**证件类型,参照数据字典（人员证件类型）*/
    @NotBlank(message = "证件类型不能为空")
    @Pattern(regexp = "^(\\d{2})$",message = "证件类型有误")
    private String docType;
    /**法人证件号码*/
    @NotBlank(message = "法人证件号码不能为空")
    @Pattern(regexp = "^\\w{1,64}$",message = "法人证件号码有误，数字或英文字符不大于64位")
    private String docCode;
    /**法定代表人姓名*/
    @NotBlank(message = "法定代表人姓名不能为空")
    @Pattern(regexp = "^\\S{1,64}$",message = "法定代表人姓名有误，非空白字符不大于64位")
    private String legDocName;
    /**法定代表人证件类型,参照数据字典（人员证件类型）*/
    @NotBlank(message = "法定代表人证件类型不能为空")
    @Pattern(regexp = "^(\\d{2})$",message = "法定代表人证件类型有误")
    private String legDocType;
    /**法定代表人（负责人）证件号码*/
    @NotBlank(message = "法定代表人（负责人）证件号码不能为空")
    @Pattern(regexp = "^\\w{1,64}$",message = "法定代表人（负责人）证件号码有误，数字或英文字符不大于64位")
    private String legDocCode;
    /**商户代码*/
    @NotBlank(message = "商户代码不能为空")
    @Pattern(regexp = "^\\w{1,64}$",message = "商户代码有误，数字或英文字符不大于64位")
    private String cusCode;
    /**商户行业类别*/
    @NotBlank(message = "商户行业类别不能为空")
    @Pattern(regexp = "^\\S{1,256}$",message = "商户行业类别有误，非空白字符不大于256位")
    private String induType;
    /**收款账\卡号*/
    @NotBlank(message = "收款账\\卡号不能为空")
    @Pattern(regexp = "^\\d{0,32}$",message = "收款账\\卡号有误，数字不超过32位")
    private String bankNo;
    /**收款账\卡号开户行*/
    @NotBlank(message = "收款账\\卡号开户行不能为空")
    @Pattern(regexp = "^\\S{1,128}$",message = "收款账\\卡号开户行有误，非空白字符不大于128位")
    private String openBank;
    /**商户注册地址(省)，参照数据字典定义（地区），
     * 商户属性为实体特约商户、
     * 实体兼网络特约商户时必输*/
    @Pattern(regexp = "^(\\s)||(\\d{6})$",message = "商户注册地址(省)有误")
    private String regAddrProv;
    /**商户注册地址，商户属性为实体特约商户、实体兼网络特约商户时必输*/
    @Pattern(regexp = "^\\S{0,256}$",message = "商户注册地址有误，非空白字符不大于256位")
    private String regAddrDetail;
    /**商户经营地址(省) ，参照数据字典定义（地区），商户属性为实体特约商户时必输*/
    @Pattern(regexp = "^(\\s)||(\\d{6})$",message = "商户经营地址(省)有误")
    private String addrProv;
    /**商户经营地址，商户属性为实体特约商户时必输*/
    @Pattern(regexp = "^\\S{0,256}$",message = "商户经营地址有误，非空白字符不大于256位")
    private String addrDetail;
    /**网址，商户属性为网络特约商户时必输*/
    @Pattern(regexp = "^((http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?){0,64}$",message = "网址有误,不得超过64位字符")
    private String url;
    /**服务器IP（应为xxx.xxx.xxx.xxx，xxx可为3位数字，也可为一位数字），商户属性为网络特约商户时必输*/
    @Pattern(regexp = "^(\\s)||(([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3}))$",message = "服务器IP有误")
    private String serverIp;
    /**ICP备案编号，商户属性为网络特约商户时必输*/
    @Pattern(regexp = "^\\S{0,20}$",message = "ICP备案编号有误，数字或英文字符不大于20位")
    private String icp;
    /**商户联系人*/
    @NotBlank(message = "商户联系人不能为空")
    @Pattern(regexp = "^\\S{1,64}$",message = "商户联系人有误，非空白字符不大于64位")
    private String contName;
    /**商户联系电话*/
    @NotBlank(message = "商户联系电话不能为空")
    @Pattern(regexp = "^\\S{1,32}$",message = "商户联系电话有误，非空白字符不大于32位")
    private String contPhone;
    /**商户E-mail*/
    @Pattern(regexp = "^\\S{0,64}$",message = "商户E-mail有误，非空白字符不大于64位")
    private String cusEmail;
    /**商户经营地区范围，省级，可多选，参考数据字典定义。其中商户属性为实体特约商户、实体兼网络特约商户必输。*/
    private String occurarea;
    private List<AreaCode> areaList=new ArrayList<>();
    /**清算网络，参见数据字典定义, 可多选,多个已英文逗号分割*/
    @NotBlank(message = "清算网络不能为空")
    @Pattern(regexp = "^\\S{1,32}$",message = "清算网络有误，非空白字符不大于32位")
    private String networkType;
    private String networkTypeForJS;
    /**商户状态，参见数据字典定义*/
    @NotBlank(message = "商户状态不能为空")
    @Pattern(regexp = "^(\\d{2})$",message = "商户状态有误")
    private String status;
    /**服务起始时间，时间格式，YYYY-MM-DD,例如2016-06-07。商户状态为启用时必输，填写商户签约时间*/
    @NotNull(message = "服务起始时间不能为空")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date startTime;
    /**服务终止时间，时间格式，YYYY-MM-DD,例如2016-06-07。商户状态为关闭或注销时必输*/
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date endTime;
    /**合规风险状况，参见数据字典定义*/
    @Pattern(regexp = "^(\\d{2})$",message = "合规风险状况有误")
    private String riskStatus;
    /**股东信息*/
    @Pattern(regexp = "^\\S{0,1024}$",message = "股东信息有误，非空白字符不大于1024位")
    private String shareHolder;
    /**开通业务种类，参见数据字典定义,多个已英文逗号分割。商户属性为实体特约商户、实体兼网络特约商户时必输*/
    @Pattern(regexp = "^\\S{0,32}$",message = "开通业务种类有误，非空白字符不大于32位")
    private String openType;
    private String openTypeForJS;
//    /**用于详情显示*/
//    private String openTypeString;
    /**计费类型，参见数据字典定义。商户属性为实体特约商户、实体兼网络特约商户时必输*/
    @Pattern(regexp = "^(//s)||(\\d{2})$",message = "计费类型有误")
    private String chageType;
    /**支持账户类型，参见数据字典定义*/
    @NotBlank(message = "支持账户类型不能为空")
    @Pattern(regexp = "^(\\d{2})$",message = "支持账户类型有误")
    private String accountType;
    /**拓展方式，参见数据字典定义*/
    @NotBlank(message = "拓展方式不能为空")
    @Pattern(regexp = "^(\\d{2})$",message = "拓展方式有误")
    private String expandType;
    /**外包服务机构名称，拓展方式为外包服务机构推荐时必输*/
    @Pattern(regexp = "^\\S{0,128}$",message = "外包服务机构名称有误，非空白字符不大于128位")
    private String outServiceName;
    /**外包服务机构法人证件类型，拓展方式为外包服务机构推荐时必输*/
    @Pattern(regexp = "^(//s)||(\\d{2})$",message = "外包服务机构法人证件类型有误")
    private String outServiceCardType;
    /**外包服务机构法人证件号码，拓展方式为外包服务机构推荐时必输*/
    @Pattern(regexp = "^\\w{0,64}$",message = "外包服务机构法人证件号码有误，非空白字符不大于64位")
    private String outServiceCardCode;
    /**外包服务机构法定代表人证件类型，参见数据字典定义，拓展方式为外包服务机构推荐时必输*/
    @Pattern(regexp = "^(//s)||(\\d{2})$",message = "外包服务机构法定代表人证件类型有误")
    private String outServiceLegCardType;
    /**外包服务机构法定代表人证件号码，拓展方式为外包服务机构推荐时必输*/
    @Pattern(regexp = "^\\w{0,64}$",message = "外包服务机构法定代表人证件号码有误，数字或英文字符不大于64位")
    private String outServiceLegCardCode;
    /**上报机构（数字、下划线、字母）*/
    private String orgId;
    /**上报日期 格式：yyyy-MM-DD HH:mm:ss*/
    private Date repDate;
    /**上传方式（值：03），参见数据字典定义*/
    private String repType;
    /**上传人*/
    private String repPerson;
    /**报送状态：上报状态上报状态00: 初始 01: 处理成功 02: 处理失败 03:上报中 04:审核通过 05:审核拒绝 06:上报失败 */
    private String uploadStatus;
    /**报送时间*/
    private Date uploadDate;
    /**报送记录，标识第几次报送*/
    private String note;
    /**
     * 判断数据是否已经同步
     * 1：表示已同步
     * 0：表示未同步
     * */
    private String  exist="0";
    /**
     * 1:已删除
     * 0：未删除
     * */
    private  String deleteFlag;
    /**
     *商户协会状态
     * 00： 未上报   01 ：已上报   02  ： 已删除
     * */
    private  String centerStatus;
    /**
     *审核失败备注
     * */
    private  String auditFailNote;

}
